﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Text;
using Proxy;
using System.Web.Services;
using SIM.Util;

namespace SIM.Geo.UI.Geo
{
    
    public partial class FrmCanal : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                rgLista.ClientSettings.Scrolling.ScrollHeight = int.Parse(System.Configuration.ConfigurationManager.AppSettings["listaPrincipalScrollHeight"]);
                txtAnio.Enabled = false;
                ddlMes.Enabled = false;
                txtAnio.CssClass = CSS_INPUT_DISABLED;
                ddlMes.CssClass = CSS_INPUT_DISABLED;

                CargarCombos();
                Listar();
            }
            if (String.CompareOrdinal(hidCodigoLabor.Value, hidDato.Value) != 0)
            {
                hidCodigoLabor.Value = hidDato.Value;

                Listar();
                CargarLabor();
            }
        }

        private void CargarLabor()
        {
            try
            {
                searchBoxLabor.Text = string.Empty;
                lblLabor.Text = string.Empty;
                using (var proxyLabor = new SELaborClient("BasicHttpBinding_ISELabor"))
                {
                    var labor = proxyLabor.Obtener(int.Parse(hidCodigoLabor.Value.ToString(CultureInfo.InvariantCulture)));
                    if (labor != null)
                    {
                        hidCodigoLabor.Value = labor.CodigoLabor.ToString(CultureInfo.InvariantCulture);
                        hidDato.Value = labor.CodigoLabor.ToString(CultureInfo.InvariantCulture);
                        lblLabor.Text = labor.NombreLabor + " - " + labor.Cuadrante.ToString(CultureInfo.InvariantCulture);
                        searchBoxLabor.Text = labor.NombreLabor;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:CargarLabor", ex);
            }
        }

        private void CargarCombos()
        {
            try
            {
                //Llena los combos de busqueda                
                txtAnioBuscar.Text = DateTime.Today.Year.ToString(CultureInfo.InvariantCulture);
                txtAnio.Text = DateTime.Today.Year.ToString(CultureInfo.InvariantCulture);

                ddlEstadoBuscar.Items.Add(new ListItem(Constantes.TipoSeleccion.TODOS, TipoDropDownList.Todos.GetHashCode().ToString(CultureInfo.InvariantCulture)));
                ddlEstadoBuscar.Items.Add(new ListItem(enmEstadoSondaje.Iniciado.ToString(), enmEstadoSondaje.Iniciado.GetHashCode().ToString(CultureInfo.InvariantCulture)));
                ddlEstadoBuscar.Items.Add(new ListItem(enmEstadoSondaje.Finalizado.ToString(), enmEstadoSondaje.Finalizado.GetHashCode().ToString(CultureInfo.InvariantCulture)));
                ddlEstadoBuscar.SelectedValue = enmEstadoSondaje.Iniciado.GetHashCode().ToString(CultureInfo.InvariantCulture);

                using (var proxy = new SEZonaClient("BasicHttpBinding_ISEZona"))
                {
                    var zonas = proxy.ObtenerListItem().ToList();
                    Bind(ddlZonaBuscar, zonas);
                    ddlZonaBuscar.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.TODOS, TipoDropDownList.Todos.GetHashCode().ToString(CultureInfo.InvariantCulture)));

                    Bind(ddlZona, zonas);
                    ddlZona.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.SELECCIONE, TipoDropDownList.Seleccionar.GetHashCode().ToString(CultureInfo.InvariantCulture)));
                }

                //Llena los combos para registro
                using (var proxy = new SEGeologoClient("BasicHttpBinding_ISEGeologo"))
                {
                    Bind(ddlResponsable, proxy.ObtenerListItem().ToList());
                    ddlResponsable.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.SELECCIONE, TipoDropDownList.Seleccionar.GetHashCode().ToString(CultureInfo.InvariantCulture)));
                }

                using (var proxy = new SETipoLadoCanalClient("BasicHttpBinding_ISETipoLadoCanal"))
                {
                    Bind(ddlLado, proxy.ObtenerListItem().ToList());
                    ddlLado.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.SELECCIONE, TipoDropDownList.Seleccionar.GetHashCode().ToString(CultureInfo.InvariantCulture)));
                }

                using (var proxy = new SEMesClient("BasicHttpBinding_ISEMes"))
                {
                    var listaMes = proxy.ObtenerListItem();
                    Bind(ddlMesBuscar, listaMes);
                    ddlMesBuscar.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.TODOS, TipoDropDownList.Todos.GetHashCode().ToString(CultureInfo.InvariantCulture)));

                    Bind(ddlMes, listaMes);
                    ddlMesBuscar.SelectedValue = DateTime.Today.Month.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0');
                }
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:CargarCombos", ex);
            }
        }

        #region Mensajes
        
        private void MostrarMensajeValidacionUbicacion(string mensaje)
        {
            pnlMensajeValidacionUbicacion.Visible = true;
            lblMensajeValidacionUbicacion.Text = mensaje;
        }
        
        private void OcultarMensajeValidacionUbicacion()
        {
            pnlMensajeValidacionUbicacion.Visible = false;
            lblMensajeValidacionUbicacion.Text = string.Empty;
        }
        
        protected override void MostrarMensajeValidacion(string mensaje)
        {
            pnlMensajeValidacion.Visible = true;
            lblMensajeValidacion.Text = mensaje;
        }
        
        protected override void OcultarMensajeValidacion()
        {
            pnlMensajeValidacion.Visible = false;
            lblMensajeValidacion.Text = string.Empty;
        }
        
        protected override void MostrarMensaje(string mensaje, enmTipoMensajeMostrar tipoMensaje = enmTipoMensajeMostrar.Informativa)
        {
            pnlMensaje.Visible = true;
            lblMensaje.Text = mensaje;
            pnlMensaje.CssClass = ObtenerEstiloMensaje(tipoMensaje);
        }
        
        protected override void OcultarMensaje()
        {
            pnlMensaje.Visible = false;
            lblMensaje.Text = string.Empty;
        }
        
        #endregion
        
        private void Habilitar(bool estado = true)
        {
            ddlResponsable.Enabled = estado;
            ddlZona.Enabled = estado;
            txtFechaInicio.Enabled = estado;
            //txtFechaFinal.Enabled = estado;
            ibtnConsultar.Enabled = estado;
            searchBoxLabor.Enabled = estado;
            txtDistancia.Enabled = estado;
            txtAncho.Enabled = estado;
            ddlLado.Enabled = estado;
            txtReferencia.Enabled = estado;
            txtObservaciones.Enabled = estado;
            
            ibtnConsultar.Visible = estado;
            ibtnGuardar.Visible = estado;
        }
        
        private void HabilitarUbicacion(bool estado = true)
        {
            txtEste.Enabled = estado;
            txtNorte.Enabled = estado;
            txtCota.Enabled = estado;
            txtInclinacion.Enabled = estado;
            txtAzimut.Enabled = estado;
            
            ibtnAutocad.Visible = estado;
            ibtnInclinacion.Visible = estado;
            ibtnAzimut.Visible = estado;
            
            ibtnGuardarUbicacion.Visible = estado;
        }
        
        protected override void Listar()
        {
            try
            {
                using (var proxy = new SECanalClient("BasicHttpBinding_ISECanal"))
                {
                    var lista = proxy.BuscarCanal(int.Parse(txtAnioBuscar.Text), int.Parse(ddlZonaBuscar.SelectedValue.ToString(CultureInfo.InvariantCulture)),
                        int.Parse(ddlEstadoBuscar.SelectedValue.ToString(CultureInfo.InvariantCulture)), ddlMesBuscar.SelectedValue.ToString(CultureInfo.InvariantCulture));
                    rgLista.DataSource = lista;
                    
                    rgLista.DataBind();
                }
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:Listar", ex);
            }
        }
        
        protected override void Limpiar()
        {
            txtAnio.Text = txtAnioBuscar.Text;
            ddlMes.SelectedValue = ddlMesBuscar.SelectedValue;
            
            txtNombreCAN.Text = string.Empty;
            ddlZona.SelectedValue = TipoDropDownList.Seleccionar.GetHashCode().ToString(CultureInfo.InvariantCulture);
            ddlResponsable.SelectedValue = TipoDropDownList.Seleccionar.GetHashCode().ToString(CultureInfo.InvariantCulture);
            ddlLado.SelectedValue = TipoDropDownList.Seleccionar.GetHashCode().ToString(CultureInfo.InvariantCulture);
            txtFechaInicio.SelectedDate = null;
            txtDistancia.Text = string.Empty;
            txtAncho.Text = string.Empty;
            
            hidCodigoLabor.Value = "0";
            hidDato.Value = "0";
            lblLabor.Text = string.Empty;
            searchBoxLabor.Text = string.Empty;
            
            txtReferencia.Text = string.Empty;
            txtObservaciones.Text = string.Empty;
            
            lblEstado.Text = enmEstadoSondaje.Iniciado.ToString();
            
            OcultarMensaje();
            OcultarMensajeValidacion();
        }
        
        protected override void Guardar()
        {
            try
            {
                //Se valida antes de grabar
                var sb = new StringBuilder();
                if (!Validar(ref sb))
                {
                    MostrarMensajeValidacion(sb.ToString());
                    return;
                }

                var canal = new Canal
                                     { CodigoCanal = int.Parse(hidCodigo.Value), NombreCAN = txtNombreCAN.Text };
                if (txtFechaInicio.SelectedDate != null)
                    canal.FechaInicio = (DateTime)txtFechaInicio.SelectedDate;
                
                canal.AnchoLabor = decimal.Parse(txtAncho.Text);
                canal.Referencia = txtReferencia.Text.Trim();
                canal.Observacion = txtObservaciones.Text.Trim();
                canal.Norte = 0;
                canal.Este = 0;
                canal.Cota = 0;
                canal.Distancia = int.Parse(txtDistancia.Text);
                canal.Azimut = 0;
                canal.Inclinacion = 0;
                canal.Estado = (short)enmEstadoCanal.Iniciado.GetHashCode();
                canal.Anio = int.Parse(txtAnio.Text);
                canal.CodigoLabor = int.Parse(hidCodigoLabor.Value.ToString(CultureInfo.InvariantCulture));
                canal.CodigoZona = int.Parse(ddlZona.SelectedValue.ToString(CultureInfo.InvariantCulture));
                canal.CodigoLadoCanal = int.Parse(ddlLado.SelectedValue.ToString(CultureInfo.InvariantCulture));
                canal.CodigoGeologo = int.Parse(ddlResponsable.SelectedValue.ToString(CultureInfo.InvariantCulture));
                canal.Mes = ddlMes.SelectedValue;
                
                using (var proxy = new SECanalClient("BasicHttpBinding_ISECanal"))
                {
                    if (String.CompareOrdinal(hidCodigo.Value, "0") == 0)
                        proxy.InsertarCanal(canal);
                    else
                        proxy.ModificarCanal(canal);
                }
                
                MostrarMensaje(MSG_OK_GRABAR);
                mpRegistro.Hide();
                Listar();
            }
            catch (Exception ex)
            {
                MostrarMensajeValidacion(MSG_ERROR_GRABAR);
                Logger.Error("frmCanal:Guardar", ex);
            }
        }
        
        private void CargarDatos(int codigoCanal)
        {
            try
            {
                using (var proxy = new SECanalClient("BasicHttpBinding_ISECanal"))
                {
                    var item = proxy.ObtenerCanal(codigoCanal);
                    if (item != null)
                    {
                        hidCodigo.Value = item.CodigoCanal.ToString(CultureInfo.InvariantCulture);
                        txtNombreCAN.Text = item.NombreCAN;
                        txtFechaInicio.SelectedDate = item.FechaInicio;
                        //txtFechaFinal.SelectedDate = item.FechaFin;
                        txtAncho.Text = item.AnchoLabor.ToString(CultureInfo.InvariantCulture);
                        txtReferencia.Text = item.Referencia;
                        txtObservaciones.Text = item.Observacion.Trim();
                        txtDistancia.Text = Convert.ToString(item.Distancia);
                        
                        if (item.Labor != null)
                        {
                            hidCodigoLabor.Value = item.CodigoLabor.ToString(CultureInfo.InvariantCulture);
                            hidDato.Value = item.CodigoLabor.ToString(CultureInfo.InvariantCulture);
                            lblLabor.Text = item.Labor.NombreLabor + " - " + item.Labor.Cuadrante.ToString(CultureInfo.InvariantCulture);
                            searchBoxLabor.Text = item.Labor.NombreLabor;
                        }
                        else
                        {
                            hidCodigoLabor.Value = "0";
                            lblLabor.Text = string.Empty;
                            searchBoxLabor.Text = string.Empty;
                        }
                        
                        txtAnio.Text = item.Anio.ToString(CultureInfo.InvariantCulture);
                        ddlZona.SelectedValue = item.CodigoZona.ToString(CultureInfo.InvariantCulture);
                        ddlLado.SelectedValue = item.CodigoLadoCanal.ToString(CultureInfo.InvariantCulture);
                        ddlResponsable.SelectedValue = item.CodigoGeologo.ToString(CultureInfo.InvariantCulture);
                        ddlMes.SelectedValue = item.Mes;
                        
                        //Verifico el estado y deshabilito el guardar
                        lblEstado.Text = item.Estado.CompareTo((short)enmEstadoCanal.Finalizado.GetHashCode()) == 0 ? enmEstadoCanal.Finalizado.ToString() : enmEstadoCanal.Iniciado.ToString();
                        
                        //Deshabilito cajas de texto que se relacionan con muestras
                        if (item.CumplioMuestra == enmEstadoCumplimiento.Cumplido.GetHashCode())
                        {
                            txtDistancia.ToolTip = "Cumplió muestra";
                            txtDistancia.Enabled = false;
                        }
                        else
                        {
                            txtDistancia.ToolTip = string.Empty;
                            txtDistancia.Enabled = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:CargarDatos", ex);
            }
        }
        
        private void GenerarNombreCanal()
        {
            string nombre;
            using (var proxy = new SECanalClient("BasicHttpBinding_ISECanal"))
            {
                nombre = proxy.GenerarNombreCanal(int.Parse(txtAnio.Text));
            }
            txtNombreCAN.Text = nombre;
        }
        
        protected override bool Validar(ref StringBuilder sb)
        {
            bool retorno = true;
            try
            {
                //Valida si el nombre ingresado ya existe, si solo es Nuevo
                if (String.CompareOrdinal(hidCodigo.Value, "0") == 0)
                {
                    using (var proxy = new SECanalClient("BasicHttpBinding_ISECanal"))
                    {
                        bool existe = proxy.VerificarExisteCanal(txtNombreCAN.Text.Trim());
                        if (existe)
                        {
                            sb.AppendLine("Canal con Nombre : " + txtNombreCAN.Text.Trim() + " ya existe, verifique");
                            retorno = false;
                        }
                    }
                }
                
                //Validamos el Labor que sea obligario
                if (string.IsNullOrEmpty(lblLabor.Text))
                {
                    sb.AppendLine("No ha seleccionado Labor. El campo es obligatorio.");
                    retorno = false;
                }
            }
            catch (Exception ex)
            {
                retorno = false;
                Logger.Error("frmCanal:Validar", ex);
            }
            return retorno;
        }
        
        protected void ImgCloseClick(object sender, ImageClickEventArgs e)
        {
            mpRegistro.Hide();
        }
        
        protected void RgListaItemCommand(object sender, GridCommandEventArgs e)
        {
            if (String.CompareOrdinal(e.CommandName, "Editar") == 0)
            {
                var item = (GridEditableItem)e.Item;
                int codigoCanal = int.Parse(item.GetDataKeyValue("CodigoCanal").ToString());
                //Carga detalle de sondaje
                Habilitar();
                CargarDatos(codigoCanal);
                txtAnio.Enabled = false;
                ddlMes.Enabled = false;
                txtNombreCAN.Enabled = false;
                txtNombreCAN.CssClass = CSS_INPUT_DISABLED;
                
                OcultarMensaje();
                OcultarMensajeValidacion();
                
                mpRegistro.Show();
            }
            if (String.CompareOrdinal(e.CommandName, "Ver") == 0)
            {
                var item = (GridEditableItem)e.Item;
                int codigoCanal = int.Parse(item.GetDataKeyValue("CodigoCanal").ToString());
                //Carga detalle de sondaje                
                CargarDatos(codigoCanal);
                Habilitar(false);
                
                txtAnio.Enabled = false;
                ddlMes.Enabled = false;
                txtNombreCAN.Enabled = false;
                
                OcultarMensaje();
                OcultarMensajeValidacion();
                
                mpRegistro.Show();
            }
            if (String.CompareOrdinal(e.CommandName, "Ubicacion") == 0)
            {
                var item = (GridEditableItem)e.Item;
                int codigoCanal = int.Parse(item.GetDataKeyValue("CodigoCanal").ToString());
                CargarDatosUbicacion(codigoCanal);
                OcultarMensaje();
                OcultarMensajeValidacionUbicacion();
                mpUbicacion.Show();
            }
            
            if (e.CommandName == RadGrid.FilterCommandName)
            {
                Listar();
            }
        }
        
        protected void RgListaDeleteCommand(object sender, GridCommandEventArgs e)
        {
            try
            {
                int codigoCanal = int.Parse(((GridDataItem)e.Item).GetDataKeyValue("CodigoCanal").ToString());
                
                using (var proxy = new SECanalClient("BasicHttpBinding_ISECanal"))
                {
                    proxy.EliminarCanal(codigoCanal);
                }
                
                MostrarMensaje(MSG_OK_ELIMINAR);
            }
            catch (Exception ex)
            {
                MostrarMensaje(MSG_ERROR_ELIMINAR, enmTipoMensajeMostrar.Error);
                Logger.Error("frmCanal:rgLista_DeleteCommand", ex);
            }
            finally
            {
                Listar();
            }
        }
        
        protected void IbtnBuscarClick(object sender, ImageClickEventArgs e)
        {
            OcultarMensaje();
            Listar();
        }
        
        protected void IbtnExportarClick(object sender, ImageClickEventArgs e)
        {
            try
            {
                Listar();

                rgLista.ExportSettings.Excel.Format = (GridExcelExportFormat)Enum.Parse(typeof(GridExcelExportFormat), "ExcelML");
                rgLista.ExportSettings.IgnorePaging = true;
                rgLista.ExportSettings.ExportOnlyData = true;
                rgLista.ExportSettings.OpenInNewWindow = true;
                rgLista.MasterTableView.ExportToExcel();
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:ibtnExportar_Click", ex);
            }
        }
        
        protected void IbtnRegistrarClick(object sender, ImageClickEventArgs e)
        {
            if (String.CompareOrdinal(ddlMesBuscar.SelectedValue, TipoDropDownList.Todos.GetHashCode().ToString(CultureInfo.InvariantCulture)) == 0)
            {
                MostrarMensaje("Para regsitrar nuevo CANAL seleccione MES!", enmTipoMensajeMostrar.Error);
                return;
            }
            
            Limpiar();
            
            txtNombreCAN.Enabled = false;
            hidCodigo.Value = "0";
            Habilitar();
            GenerarNombreCanal();
            mpRegistro.Show();
        }
        
        protected void IbtnFinalizarClick(object sender, ImageClickEventArgs e)
        {
            try
            {
                OcultarMensaje();
                var sondajes = new List<int>();
                
                foreach (GridDataItem item in rgLista.Items)
                {
                    var chkSel = (CheckBox)item.FindControl("chkSel");
                    if (chkSel != null)
                    {
                        if (chkSel.Checked)
                        {
                            var hidSel = (HiddenField)item.FindControl("hidSel");
                            var hidEstado = (HiddenField)item.FindControl("hidEstado");
                            if (String.CompareOrdinal(hidEstado.Value, enmEstadoSondaje.Iniciado.GetHashCode().ToString(CultureInfo.InvariantCulture)) == 0)
                                sondajes.Add(int.Parse(hidSel.Value));
                        }
                    }
                }
                
                //Finaliza los Canal
                
                if (sondajes.Count > 0)
                {
                    string result;
                    using (var proxy = new SECanalClient("BasicHttpBinding_ISECanal"))
                    {
                        result = proxy.FinalizarCanal(sondajes.ToArray());
                    }
                    
                    if (String.CompareOrdinal(result, "Finalizado") == 0)
                    {
                        MostrarMensaje(result);
                        //Vuelve la listar
                        Listar();
                    }
                    else
                    {
                        MostrarMensaje(result, enmTipoMensajeMostrar.Error);
                    }
                }
                else
                {
                    MostrarMensaje("Para finalizar al menos debe seleccionar un Canal.", enmTipoMensajeMostrar.Advertencia);
                }
            }
            catch (Exception ex)
            {
                MostrarMensaje(MSG_ERROR_GENERICO);
                Logger.Error("frmCanal:ibtnFinalizar_Click", ex);
            }
        }
        
        protected void IbtnGuardarClick(object sender, ImageClickEventArgs e)
        {
            Guardar();
        }
        
        protected void IbtnCancelarClick(object sender, ImageClickEventArgs e)
        {
            mpRegistro.Hide();
        }
        
        private string ObtenerCodigoCanalGrid()
        {
            var retorno = "0";
            try
            {
                string codigoCanal = string.Empty;
                foreach (GridDataItem item in rgLista.Items)
                {
                    var chkSel = (CheckBox)item.FindControl("chkSel");
                    if (chkSel != null)
                    {
                        if (chkSel.Checked)
                        {
                            var hidSel = (HiddenField)item.FindControl("hidSel");
                            codigoCanal = hidSel.Value;
                            break;
                        }
                    }
                }
                
                retorno = codigoCanal.Length == 0 ? "0" : codigoCanal;
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:ObtenerCodigoCanalGrid", ex);
            }
            if (String.CompareOrdinal(retorno, "0") == 0)
                MostrarMensaje("No ha seleccionado ningún Canal.", enmTipoMensajeMostrar.Advertencia);
            return retorno;
        }
        
        protected void IbtnMuestrasClick(object sender, ImageClickEventArgs e)
        {
            try
            {
                string codigoCanal = ObtenerCodigoCanalGrid();
                
                if (String.CompareOrdinal(codigoCanal, "0") == 0 || codigoCanal.Length == 0)
                    return;
                Response.Redirect("frmMuestraCanal.aspx?id=" + codigoCanal, false);
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:ibtnMuestras_Click", ex);
            }
        }
        
        protected void SearchBoxLaborSearch(object sender, SearchBoxEventArgs e)
        {
            try
            {
                hidDato.Value = "0";
                hidCodigoLabor.Value = "0";
                searchBoxLabor.Text = string.Empty;
                lblLabor.Text = string.Empty;
                if (e.Value != null)
                {
                    hidDato.Value = e.Value;
                    hidCodigoLabor.Value = e.Value;
                    CargarLabor();
                }
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:searchBoxLabor_Search", ex);
            }
        }
        
        [WebMethod]
        public static List<SearchBoxData> GetResults(SearchBoxContext context)
        {
            List<SearchBoxData> data = null;
            try
            {
                using (var proxy = new SELaborClient("BasicHttpBinding_ISELabor"))
                {
                    var lista = proxy.Buscar(context.Text).ToList();
                    data = lista.Select(x => new SearchBoxData { Value = x.CodigoLabor.ToString(CultureInfo.InvariantCulture), Text = x.NombreLabor }).ToList();
                }
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:GetResults", ex);
            }
            return data;
        }
        
        protected void RgListaPageIndexChanged(object sender, GridPageChangedEventArgs e)
        {
            Listar();
        }
        
        protected void RgListaSortCommand(object sender, GridSortCommandEventArgs e)
        {
            Listar();
        }
        
        protected void RgListaPageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
        {
            Listar();
        }
        
        protected void RgListaItemDataBound(object sender, GridItemEventArgs e)
        {
            try
            {
                if (e.Item.ItemType == GridItemType.Item || e.Item.ItemType == GridItemType.AlternatingItem)
                {
                    var item = (GridDataItem)e.Item;
                    var hidEstado = (HiddenField)item.FindControl("hidEstado");
                    if (String.CompareOrdinal(hidEstado.Value, enmEstadoSondaje.Finalizado.GetHashCode().ToString(CultureInfo.InvariantCulture)) == 0)
                    {
                        var btnEliminar = (ImageButton)item["btnEliminar"].Controls[0];
                        btnEliminar.ToolTip = BUTTON_TOOLTIP_DESHABILITADO;
                        btnEliminar.Enabled = false;
                        
                        var btnEditar = (ImageButton)item["btnEditar"].Controls[0];
                        btnEditar.ToolTip = BUTTON_TOOLTIP_DESHABILITADO;
                        btnEditar.Enabled = false;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:rgLista_ItemDataBound", ex);
            }
        }
        
        protected void DdlAnioSelectedIndexChanged(object sender, EventArgs e)
        {
            GenerarNombreCanal();
        }
        
        #region Actualizar Ubicacion
        
        private void CargarDatosUbicacion(int codigoSondaje)
        {
            try
            {
                using (var proxy = new SECanalClient("BasicHttpBinding_ISECanal"))
                {
                    var item = proxy.ObtenerCanal(codigoSondaje);
                    if (item != null)
                    {
                        hidCodigo.Value = item.CodigoCanal.ToString(CultureInfo.InvariantCulture);
                        txtNombreCAN1.Text = item.NombreCAN;
                        hidCodigoZona.Value = item.CodigoZona.ToString(CultureInfo.InvariantCulture);
                            
                        txtNombreLabor1.Text = item.Labor != null ? item.Labor.NombreLabor : string.Empty;
                        
                        txtEste.Text = Convert.ToString(item.Este);
                        txtNorte.Text =Convert.ToString(item.Norte);
                        txtCota.Text = Convert.ToString(item.Cota);
                        txtInclinacion.Text = Convert.ToString(item.Inclinacion);
                        txtAzimut.Text = Convert.ToString(item.Azimut);
                        
                        //Verifico el estado y deshabilito el guardar
                        if (item.Estado.CompareTo((short)enmEstadoCanal.Finalizado.GetHashCode()) == 0)
                        {
                            HabilitarUbicacion(false);
                        }
                        else
                        {
                            HabilitarUbicacion();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("frmActualizarUbiSondaje:CargarDatos", ex);
            }
        }
        
        private void LimpiarHora()
        {
            txtGrados.Text = "0";
            txtMinutos.Text = "0";
            txtSegundos.Text = "0";
        }
        
        protected void IbtnInclinacionClick(object sender, ImageClickEventArgs e)
        {
            try
            {
                LimpiarHora();
                txtGrados.MinValue = -90;
                txtGrados.MaxValue = 90;
                rvGrados.MaximumValue = "90";
                rvGrados.MinimumValue = "-90";
                rvGrados.ErrorMessage = "Rango permitido es [-90 a 90]";
                if (txtInclinacion.Text.Length > 0)
                {
                    using (var proxy = new SEGradoClient("BasicHttpBinding_ISEGrado"))
                    {
                        var grado = proxy.ConvertirAHoras(double.Parse(txtInclinacion.Text));
                        txtGrados.Text = grado.Grados.ToString(CultureInfo.InvariantCulture);
                        txtMinutos.Text = grado.Minutos.ToString(CultureInfo.InvariantCulture);
                        txtSegundos.Text = grado.Segundos.ToString(CultureInfo.InvariantCulture);
                    }
                }
                lblHora.Text = "INCLINACIÓN";
                hidOpcionHora.Value = "Inc";
                mpHora.Show();
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:ibtnInclinacion_Click", ex);
            }
        }
        
        protected void IbtnAzimutClick(object sender, ImageClickEventArgs e)
        {
            try
            {
                LimpiarHora();
                txtGrados.MinValue = 0;
                txtGrados.MaxValue = 359;
                rvGrados.MaximumValue = "359";
                rvGrados.MinimumValue = "0";
                rvGrados.ErrorMessage = "Rango permitido es [0 a 359]";
                if (txtAzimut.Text.Length > 0)
                {
                    using (var proxy = new SEGradoClient("BasicHttpBinding_ISEGrado"))
                    {
                        var grado = proxy.ConvertirAHoras(double.Parse(txtAzimut.Text));
                        txtGrados.Text = grado.Grados.ToString(CultureInfo.InvariantCulture);
                        txtMinutos.Text = grado.Minutos.ToString(CultureInfo.InvariantCulture);
                        txtSegundos.Text = grado.Segundos.ToString(CultureInfo.InvariantCulture);
                    }
                }
                lblHora.Text = "AZIMUT";
                hidOpcionHora.Value = "Azi";
                mpHora.Show();
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:ibtnAzimut_Click", ex);
            }
        }
        
        protected void IbtnOkClick(object sender, ImageClickEventArgs e)
        {
            try
            {
                int grados = int.Parse(txtGrados.Text);
                int minutos = int.Parse(txtMinutos.Text);
                int segundos = int.Parse(txtSegundos.Text);
                
                var grado = new Grado
                                {
                    Grados = grados,
                    Minutos = minutos,
                    Segundos = segundos
                };

                Grado gradovalor;
                
                using (var proxy = new SEGradoClient("BasicHttpBinding_ISEGrado"))
                {
                    gradovalor = proxy.ConvertirAGrados(grado);
                }
                
                if (String.CompareOrdinal(hidOpcionHora.Value, "Inc") == 0)
                {
                    txtInclinacion.Text = gradovalor.Angulo.ToString(CultureInfo.InvariantCulture);
                }
                else
                {
                    txtAzimut.Text = gradovalor.Angulo.ToString(CultureInfo.InvariantCulture);
                }
            
                mpHora.Hide();
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:ibtnOk_Click", ex);
            }
        }
        
        protected void IbtnCancelClick(object sender, ImageClickEventArgs e)
        {
            mpHora.Hide();
        }
        
        private bool ValidarUbicacion(ref StringBuilder sb)
        {
            bool retorno = true;
            try
            {
                //Valida si el nombre ingresado ya existe, si solo es Nuevo
                var este = double.Parse(txtEste.Text);
                var norte = double.Parse(txtNorte.Text);
                var cota = double.Parse(txtCota.Text);
                
                using (var proxy = new SEZonaClient("BasicHttpBinding_ISEZona"))
                {
                    var zona = proxy.ObtenerZona(int.Parse(hidCodigoZona.Value));
                    using (var proxyUM = new SEUnidadMineraClient("BasicHttpBinding_ISEUnidadMinera"))
                    {
                        var unidadMinera = proxyUM.ObtenerUnidadMinera(zona.CodigoUnidad);
                        if (unidadMinera != null)
                        {
                            //Valido Este
                            if (este < unidadMinera.RangoInicialEste || este > unidadMinera.RangoFinalEste)
                            {
                                sb.AppendLine("Este está fuera de rango, rango permitido es " + unidadMinera.RangoInicialEste.ToString(CultureInfo.InvariantCulture) + " al " + unidadMinera.RangoFinalEste.ToString(CultureInfo.InvariantCulture));
                                retorno = false;
                            }
                            //Valido Norte
                            if (norte < unidadMinera.RangoInicialNorte || norte > unidadMinera.RangoFinalNorte)
                            {
                                sb.AppendLine("Norte está fuera de rango, rango permitido es " + unidadMinera.RangoInicialNorte.ToString(CultureInfo.InvariantCulture) + " al " + unidadMinera.RangoFinalNorte.ToString(CultureInfo.InvariantCulture));
                                retorno = false;
                            }
                            
                            //Valida la Cota
                            if (cota < unidadMinera.RangoInicialCota || cota > unidadMinera.RangoFinalCota)
                            {
                                sb.AppendLine("Cota está fuera de rango, rango permitido es " + unidadMinera.RangoInicialCota.ToString(CultureInfo.InvariantCulture) + " al " + unidadMinera.RangoFinalCota.ToString(CultureInfo.InvariantCulture));
                                retorno = false;
                            }
                        }
                        else
                        {
                            sb.AppendLine("La Sección requiere definición de unidad minera. Defina los rangos de unidad minera");
                            retorno = false;
                        }
                    }
                }
                
                //Valido el Azimut debe ser rango 0 < 360
                if (double.Parse(txtAzimut.Text) < 0 || double.Parse(txtAzimut.Text) >= 360)
                {
                    sb.AppendFormat("El valor permitido para Azimut no es válido. Debe ser mayor igual que 0 y menor que 360");
                    retorno = false;
                }
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:ValidarUbicacion", ex);
            }
            return retorno;
        }
        
        private void GuardarUbicacion()
        {
            try
            {
                //Se valida antes de grabar
                var sb = new StringBuilder();
                if (!ValidarUbicacion(ref sb))
                {
                    MostrarMensajeValidacionUbicacion(sb.ToString());
                    return;
                }

                var canal = new Canal
                                {
                                    CodigoCanal = int.Parse(hidCodigo.Value),
                                    Norte = double.Parse(txtNorte.Text),
                                    Este = double.Parse(txtEste.Text),
                                    Cota = double.Parse(txtCota.Text),
                                    Azimut = double.Parse(txtAzimut.Text),
                                    Inclinacion = double.Parse(txtInclinacion.Text)
                                };

                using (var proxy = new SECanalClient("BasicHttpBinding_ISECanal"))
                {
                    proxy.ActualizarUbicacionCanal(canal);
                }
                
                MostrarMensaje("La ubicación de canal se ha actualizado correctamente.");
                mpUbicacion.Hide();
              
            }
            catch (Exception ex)
            {
                MostrarMensajeValidacionUbicacion(MSG_ERROR_GRABAR);
                Logger.Error("frmCanal:GuardarUbicacion", ex);
            }
        }
        
        protected void IbtnGuardarUbicacionClick(object sender, ImageClickEventArgs e)
        {
            GuardarUbicacion();
        }
        
        protected void IbtnCancelarUbicacionClick(object sender, ImageClickEventArgs e)
        {
            mpUbicacion.Hide();
        }
        
        protected void IbtnAutocadClick(object sender, ImageClickEventArgs e)
        {
            try
            {
                //Invoca a la libreria que lee Autocad
               // txtEste.Text = string.Format("{0:###0.00}", "789.4");
              //  txtNorte.Text = string.Format("{0:###0.00}", "456");
            }
            catch (Exception ex)
            {
                Logger.Error("frmCanal:ibtnAutocad_Click", ex);
            }
        }
        
        #endregion
    }
}